import { fixImageUrl } from '@/utils/index.js';
import { filterImageUrl, filterImageUrls, filterObjectImageUrls, filterArrayImageUrls, filterContentImageUrls } from '@/utils/imageUrlFilter.js';

/**
 * 全局混入：处理图片URL协议和过滤问题
 * 解决HTTPS页面加载HTTP图片的混合内容错误，并过滤API路径
 */
export default {
  methods: {
    /**
     * 处理图片URL协议
     * @param {string} url 图片URL
     * @returns {string} 处理后的URL
     */
    fixImageUrl(url) {
      return fixImageUrl(url);
    },
    
    /**
     * 过滤图片URL中的API路径
     * @param {string} url 图片URL
     * @returns {string} 过滤后的URL
     */
    filterImageUrl(url) {
      return filterImageUrl(url);
    },
    
    /**
     * 处理图片URL（协议修复 + API路径过滤）
     * @param {string} url 图片URL
     * @returns {string} 处理后的URL
     */
    processImageUrl(url) {
      const filteredUrl = this.filterImageUrl(url);
      return this.fixImageUrl(filteredUrl);
    },
    
    /**
     * 批量过滤图片URL数组
     * @param {Array} urls 图片URL数组
     * @returns {Array} 过滤后的图片URL数组
     */
    filterImageUrls(urls) {
      return filterImageUrls(urls);
    },
    
    /**
     * 过滤对象中的图片URL字段
     * @param {Object} obj 包含图片URL的对象
     * @param {Array} imageFields 图片字段名数组
     * @returns {Object} 过滤后的对象
     */
    filterObjectImageUrls(obj, imageFields) {
      return filterObjectImageUrls(obj, imageFields);
    },
    
    /**
     * 过滤数组对象中的图片URL
     * @param {Array} array 对象数组
     * @param {Array} imageFields 图片字段名数组
     * @returns {Array} 过滤后的数组
     */
    filterArrayImageUrls(array, imageFields) {
      return filterArrayImageUrls(array, imageFields);
    },
    
    /**
     * 处理富文本内容中的图片URL
     * @param {string} content 富文本内容
     * @returns {string} 处理后的内容
     */
    fixContentImageUrls(content) {
      if (!content) return content;
      
      // 先过滤API路径，再修复协议
      const filteredContent = filterContentImageUrls(content);
      
      // 替换img标签中的src属性
      return filteredContent.replace(
        /src=["'](http:\/\/[^"']+)["']/g,
        (match, url) => {
          return match.replace(url, this.fixImageUrl(url));
        }
      );
    }
  }
}; 